import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class DigestRunnable implements Runnable 
{
	private File input;
	
	public DigestRunnable(File input)
	{
		this.input = input;
	}

	@Override
	public void run() 
	{
		try {
			FileInputStream in = new FileInputStream(input);
			MessageDigest sha = MessageDigest.getInstance("SHA");
			DigestInputStream din = new DigestInputStream(in,sha);
			int b;
			while((b = din.read()) != -1);
			din.close();
			byte[] digest = sha.digest();
			StringBuffer result = new StringBuffer(input.toString());
			result.append(": ");
			for(int i=0;i<digest.length;i++)
			{
				result.append(digest[i]+ " ");
			}
			System.out.println(result);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			System.err.println(e);
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			System.err.println(e);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.err.println(e);
		}	
	}

	public static void main(String[] args) 
	{
		for(int i=0;i<args.length;i++)
		{
			File f = new File(args[i]);
			DigestRunnable dr = new DigestRunnable(f);
			Thread t = new Thread(dr);
			t.start();
		}
	}
}
